Spring ORM প্রজেক্টে Testing একটি গুরুত্বপূর্ণ অংশ, যা ডাটাবেস অপারেশন এবং ORM কনফিগারেশনগুলো সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করার জন্য ব্যবহৃত হয়। Spring-এর মধ্যে JUnit, Mockito, এবং Spring TestContext Framework ব্যবহার করে ORM এ Unit Testing ও Integration Testing করা যায়।
Spring ORM-এর জন্য ডাটাবেস কনফিগারেশন সঠিকভাবে সেটআপ হয়েছে কিনা তা নিশ্চিত করা।
Entity ক্লাসগুলো এবং ডাটাবেস টেবিলগুলির মধ্যে সঠিক mapping নিশ্চিত করা।
ডাটাবেসে সঠিক ইনসার্ট, আপডেট, ডিলিট এবং সিলেক্ট অপারেশন সম্পাদন হচ্ছে কিনা পরীক্ষা করা।
JUnit Spring ORM-এর জন্য Unit Testing করতে ব্যবহৃত সবচেয়ে জনপ্রিয় ফ্রেমওয়ার্ক। এটি প্রতিটি ORM ফিচারের কার্যকারিতা পরীক্ষা করার জন্য কার্যকর।
Mockito ব্যবহৃত হয় ডাটাবেস অ্যাক্সেস কম্পোনেন্টগুলির জন্য mocking করার জন্য, যাতে কোনো আসল ডাটাবেসের প্রয়োজন না হয়।
Spring TestContext Framework ব্যবহার করে Spring beans-এর জন্য Integration Testing করা যায় এবং এটি ডাটাবেসে করা অপারেশনগুলোর সঠিকতা নিশ্চিত করে।
Spring ORM এ Unit Testing করার সময় In-Memory Database যেমন H2 ব্যবহার করা যেতে পারে, যাতে ডাটাবেস অপারেশনগুলি পরীক্ষিত হয় কিন্তু প্রকৃত ডাটাবেসে কোনও প্রভাব ফেলে না।
application.properties
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
এই কনফিগারেশনটি H2 Database ব্যবহার করে ইন-মেমরি ডাটাবেসে টেস্ট চালাবে।
Spring-এর TestContext Framework এবং JUnit একসঙ্গে ব্যবহার করে ORM টেস্টিং করা হয়। এই কনফিগারেশনটি আমাদের Spring beans এবং ডাটাবেস অপারেশন সঠিকভাবে পরীক্ষা করতে সাহায্য করবে।
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import static org.junit.jupiter.api.Assertions.*;
@ExtendWith(SpringExtension.class)
@SpringBootTest
public class ProductServiceTest {
@Autowired
private ProductService productService;
@Test
public void testSaveProduct() {
Product product = new Product();
product.setName("Laptop");
product.setPrice(50000);
Product savedProduct = productService.saveProduct(product);
assertNotNull(savedProduct.getId()); // Check if product ID is generated
assertEquals("Laptop", savedProduct.getName()); // Check if name matches
}
}
এখানে @SpringBootTest
অ্যানোটেশনটি Spring Boot কনটেক্সট লোড করবে এবং @Autowired
ব্যবহার করে ProductService ইনজেক্ট করা হচ্ছে। saveProduct()
মেথডটি ডাটাবেসে Product অবজেক্ট সেভ করবে এবং টেস্ট নিশ্চিত করবে যে সেভ করা ডেটা সঠিকভাবে ডাটাবেসে গেছে।
Mockito ব্যবহার করে Spring ORM-এ ডাটাবেস অ্যাক্সেসের জন্য mocking করা যায়। এই পদ্ধতিতে আসল ডাটাবেসের সাথে যোগাযোগ না করেও টেস্ট করা যায়।
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
public class ProductDaoTest {
@Mock
private SessionFactory sessionFactory;
@InjectMocks
private ProductDao productDao;
@Test
public void testFindProductById() {
Product product = new Product();
product.setId(1);
product.setName("Smartphone");
when(sessionFactory.getCurrentSession().get(Product.class, 1)).thenReturn(product);
Product foundProduct = productDao.findById(1);
assertNotNull(foundProduct);
assertEquals("Smartphone", foundProduct.getName());
}
}
এখানে, Mockito ব্যবহার করে SessionFactory এর মক অবজেক্ট তৈরি করা হয়েছে, যা আমাদের ডাটাবেসের সাথে যোগাযোগ না করেই Product অবজেক্ট রিটার্ন করবে।
Spring ORM এ Testing নিশ্চিত করতে হলে, সঠিক কনফিগারেশন এবং কৌশল ব্যবহার করা আবশ্যক। JUnit, Mockito, এবং Spring TestContext Framework এর মাধ্যমে Unit ও Integration Testing করা যায়, যা ORM ম্যাপিং এবং ডাটাবেস অপারেশন সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করে। In-memory ডাটাবেসের মাধ্যমে ডাটাবেস অপারেশন পরীক্ষা করা সম্ভব, যা প্রকৃত ডাটাবেসের ওপর চাপ না ফেলে।
Spring ORM (Object-Relational Mapping) এ Unit Testing এবং Integration Testing অত্যন্ত গুরুত্বপূর্ণ, কারণ এগুলি ডেটাবেস সংক্রান্ত লজিক এবং মডেল ক্লাসগুলির সঠিকতা নিশ্চিত করতে সহায়তা করে। স্প্রিং ফ্রেমওয়ার্ক ডেভেলপারদের জন্য স্বয়ংক্রিয় টেস্টিং সুবিধা প্রদান করে, যা ORM-ভিত্তিক ডেটাবেস অ্যাক্সেসের জন্য যথেষ্ট কার্যকরী।
Unit এবং Integration Testing ORM এর জন্য দুটি আলাদা পরীক্ষণ পদ্ধতি, যেগুলির মাধ্যমে ডেটাবেস অপারেশন ও এর কার্যকারিতা সঠিকভাবে যাচাই করা যায়।
Unit Testing হল কোডের একটি নির্দিষ্ট ইউনিট (যেমন একটি মেথড বা ক্লাস) আলাদা করে পরীক্ষা করা। ORM-এ, Unit Testing সাধারণত DAO (Data Access Object) বা Service লেয়ারের লজিক টেস্ট করতে ব্যবহৃত হয়। ORM লেয়ারের উপর Unit Testing করা সহজ, কারণ এতে ডেটাবেসের সাথে সরাসরি সংযোগ স্থাপন করা হয় না (পস্না mock করা যায়)।
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Test;
import org.mockito.*;
import static org.junit.jupiter.api.Assertions.*;
public class ProductServiceTest {
@Mock
private ProductRepository productRepository;
@InjectMocks
private ProductService productService;
@Test
void testCreateProduct() {
Product product = new Product();
product.setName("Laptop");
product.setPrice(1000.00);
when(productRepository.save(any(Product.class))).thenReturn(product);
Product result = productService.createProduct(product);
assertNotNull(result);
assertEquals("Laptop", result.getName());
}
}
ব্যাখ্যা:
ProductRepository
কে mock করা হয়েছে, এবং ProductService
এর সাথে এটি ইন্টিগ্রেট করা হয়েছে।Integration Testing হল একাধিক উপাদান বা সিস্টেমের মধ্যে আন্তঃক্রিয়া পরীক্ষা করা। ORM ক্ষেত্রে, এটি সাধারণত ডেটাবেস এবং অন্যান্য সিস্টেমের সংযোগ পরীক্ষা করতে ব্যবহৃত হয়। ORM লেয়ারে Integration Testing করে নিশ্চিত হওয়া যায় যে, কোড সঠিকভাবে ডেটাবেসে ডেটা সেভ, আপডেট, রিড, ডিলিট (CRUD) অপারেশন সম্পাদন করতে পারছে কিনা।
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
public class ProductRepositoryIntegrationTest {
@Autowired
private ProductRepository productRepository;
@Test
@Transactional
void testCreateProduct() {
Product product = new Product();
product.setName("Smartphone");
product.setPrice(500.00);
productRepository.save(product);
Product fetchedProduct = productRepository.findById(product.getId()).orElse(null);
assertNotNull(fetchedProduct);
assertEquals("Smartphone", fetchedProduct.getName());
}
}
ব্যাখ্যা:
@SpringBootTest
অ্যানোটেশন ব্যবহার করে পুরো Spring Boot অ্যাপ্লিকেশন কনটেক্সট লোড করা হয়েছে, এবং এতে ডেটাবেস অপারেশনও টেস্ট করা হচ্ছে।@Transactional
অ্যানোটেশন দিয়ে নিশ্চিত করা হচ্ছে যে, টেস্ট রান হওয়ার পর পরিবর্তনগুলো রোলব্যাক হয়ে যাবে, যাতে টেস্ট ডেটাবেসে কোনও পরিবর্তন না ঘটে।বৈশিষ্ট্য | Unit Testing | Integration Testing |
---|---|---|
টেস্ট করার ক্ষেত্র | কোডের একটি নির্দিষ্ট ইউনিট (মেথড, ক্লাস) | সিস্টেমের বিভিন্ন উপাদানের সংযোগ এবং কার্যকারিতা |
অ্যাপ্লিকেশন অংশ | একক লজিক বা মেথড | ডেটাবেস বা অন্যান্য উপাদানসহ পুরো সিস্টেম |
ডেটাবেস ব্যবহার | ব্যবহার করা হয় না (Mock ব্যবহার হয়) | ডেটাবেস ব্যবহার করা হয় |
পারফরম্যান্স | দ্রুত রান হয় | তুলনামূলকভাবে ধীর রান হয় |
পরীক্ষার উদ্দেশ্য | কোডের লজিক চেক করা | পুরো সিস্টেমের ইন্টিগ্রেশন ও কার্যকারিতা যাচাই করা |
Spring ORM এ Unit এবং Integration Testing এর মাধ্যমে ডেটাবেসের কার্যক্ষমতা এবং কোডের সঠিকতা নিশ্চিত করা যায়।
এগুলি ORM ভিত্তিক ডেটাবেস অ্যাক্সেসের কার্যকারিতা এবং সঠিকতা যাচাই করতে অপরিহার্য।
Spring ORM এর মাধ্যমে ডেটাবেস অপারেশনগুলো পরীক্ষা (Testing) করার জন্য H2 Database একটি ভালো বিকল্প। H2 হল একটি ইন-মেমরি ডেটাবেস যা দ্রুত এবং হালকা। এটি স্প্রিং অ্যাপ্লিকেশনের টেস্টিং পরিবেশে খুবই উপকারী, কারণ এটি কোনও স্থায়ী ডেটাবেসে ডেটা সংরক্ষণ না করে শুধুমাত্র পরীক্ষা চলাকালীন ডেটাবেস তৈরি করে।
H2 Database এবং Spring Data JPA এর জন্য Maven pom.xml
ফাইলে নিম্নলিখিত ডিপেনডেন্সি যোগ করুন:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
spring-boot-starter-data-jpa
: Spring Data JPA ডিপেনডেন্সি।h2
: H2 Database ডিপেনডেন্সি (এটি রানটাইমের জন্য ব্যবহৃত হবে)।spring-boot-starter-test
: টেস্টিং লাইব্রেরি, যেমন JUnit এবং Mockito।application.properties
কনফিগারেশনSpring Boot অ্যাপ্লিকেশনের জন্য application.properties
ফাইলে H2 Database কনফিগার করুন।
# H2 Database configuration
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=MYSQL
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
# Hibernate settings
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
# H2 Console
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.datasource.url
: H2 Database এর ইন-মেমরি URL।spring.jpa.hibernate.ddl-auto=create-drop
: অ্যাপ্লিকেশন স্টার্ট হলে ডেটাবেস তৈরি করবে এবং বন্ধ হলে ড্রপ করবে।spring.h2.console.enabled=true
: H2 এর কনসোল সক্রিয় করা, যাতে আপনি ব্রাউজারে H2 কনসোল অ্যাক্সেস করতে পারেন (যেমন http://localhost:8080/h2-console
)।স্প্রিং ORM এ টেস্টিং করার জন্য প্রথমে একটি Entity ক্লাস তৈরি করুন। নিচে একটি উদাহরণ দেওয়া হলো:
import jakarta.persistence.*;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Getters and Setters
}
@Entity
: Entity ক্লাসটি JPA Entity হিসেবে চিহ্নিত করে।@Id
এবং @GeneratedValue
: প্রাথমিক কী হিসাবে id
ব্যবহার করা হয়েছে এবং এটি অটোমেটিক্যালি বৃদ্ধি পাবে।JPA Repository ইন্টারফেস তৈরি করুন যা ডেটাবেসের CRUD অপারেশন পরিচালনা করবে।
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
JpaRepository
: Spring Data JPA এর মাধ্যমে ডেটাবেসের CRUD অপারেশন সহজে করা যায়।Spring Boot টেস্টিং করতে @SpringBootTest
এবং @Autowired
অ্যানোটেশন ব্যবহার করা হয়।
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@Transactional
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void testCreateAndFindUser() {
// Create a new user
User user = new User();
user.setName("John Doe");
user.setEmail("john@example.com");
// Save user to the database
User savedUser = userRepository.save(user);
// Verify that the user was saved correctly
assertNotNull(savedUser.getId());
assertEquals("John Doe", savedUser.getName());
assertEquals("john@example.com", savedUser.getEmail());
// Find user by ID
User foundUser = userRepository.findById(savedUser.getId()).orElse(null);
assertNotNull(foundUser);
assertEquals(savedUser.getId(), foundUser.getId());
}
}
@SpringBootTest
: পুরো Spring Boot অ্যাপ্লিকেশন কনটেক্সট লোড করে, যাতে আমরা ইন-মেমরি H2 ডেটাবেসে টেস্ট চালাতে পারি।@Autowired
: UserRepository
কে ইনজেক্ট করা।@Transactional
: প্রতিটি টেস্ট মেথডের পর ডেটাবেস রোলব্যাক করা হয়, যাতে টেস্টের পরে ডেটাবেসের অবস্থা অপরিবর্তিত থাকে।assertNotNull
এবং assertEquals
: টেস্টিং assertions যা যাচাই করে যে ডেটা সঠিকভাবে সংরক্ষিত এবং পুনরুদ্ধার হয়েছে।আপনি H2 কনসোল ব্যবহার করে ডেটাবেসের তথ্য দেখতে পারেন। http://localhost:8080/h2-console
এ গিয়ে আপনি ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে পারবেন।
H2 Database ব্যবহার করে Spring ORM এর টেস্টিং অনেক সহজ এবং কার্যকরী। ইন-মেমরি ডেটাবেস ব্যবহার করে দ্রুত ডেটাবেস অপারেশন টেস্ট করা যায়, যেখানে ডেটাবেসে কোনো স্থায়ী পরিবর্তন ঘটবে না। Spring Boot এর সাথে H2 Database ইন্টিগ্রেট করে, আমরা খুব সহজেই স্প্রিং ORM অ্যাপ্লিকেশন টেস্ট করতে পারি এবং @SpringBootTest
এর মাধ্যমে সম্পূর্ণ কনটেক্সট লোড করে CRUD অপারেশনগুলো টেস্ট করতে পারি।
Spring Test Framework হলো Spring এর একটি গুরুত্বপূর্ণ মডিউল, যা unit testing এবং integration testing এর জন্য সরঞ্জাম সরবরাহ করে। Spring Test Framework এর মাধ্যমে আপনি Spring অ্যাপ্লিকেশন, Spring MVC, Spring Data JPA, এবং Spring ORM এর বিভিন্ন কম্পোনেন্টের কার্যকারিতা পরীক্ষা করতে পারেন।
@DataJpaTest হলো Spring Boot-এর একটি বিশেষ অ্যানোটেশন, যা JPA (Java Persistence API) রেপোজিটরির টেস্টিংয়ের জন্য ব্যবহৃত হয়। এটি মূলত in-memory database এর সাথে কাজ করে এবং শুধুমাত্র JPA সম্পর্কিত লেয়ারগুলো টেস্ট করে, যা ডাটাবেসের সাথে সম্পর্কিত কাজগুলো পরীক্ষা করতে সহায়তা করে। এই অ্যানোটেশনটি সাধারণত Repository ক্লাসের জন্য ব্যবহৃত হয়।
Spring Test Framework এবং @DataJpaTest ব্যবহার করতে, আপনার pom.xml ফাইলে কিছু ডিপেনডেন্সি যুক্ত করতে হবে।
<dependencies>
<!-- Spring Boot Starter Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- H2 Database for In-Memory Testing -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
এখন, @DataJpaTest অ্যানোটেশন ব্যবহার করে আপনার Repository ক্লাসের টেস্ট কেস তৈরি করতে হবে।
EmployeeRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
Employee findByName(String name);
}
এখানে EmployeeRepository
একটি সাধারণ JPA রেপোজিটরি ক্লাস, যা Employee
Entity পরিচালনা করে।
এখন, @DataJpaTest ব্যবহার করে EmployeeRepository
এর টেস্ট তৈরি করুন।
EmployeeRepositoryTest.java
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import static org.assertj.core.api.Assertions.assertThat;
@DataJpaTest
public class EmployeeRepositoryTest {
@Autowired
private EmployeeRepository employeeRepository;
@Test
public void testFindByName() {
// Create and save an Employee object
Employee employee = new Employee();
employee.setName("John Doe");
employee.setDepartment("IT");
employeeRepository.save(employee);
// Fetch the employee by name
Employee foundEmployee = employeeRepository.findByName("John Doe");
// Assertions to verify that the employee is correctly fetched
assertThat(foundEmployee).isNotNull();
assertThat(foundEmployee.getName()).isEqualTo("John Doe");
assertThat(foundEmployee.getDepartment()).isEqualTo("IT");
}
}
এখানে, @DataJpaTest
ব্যবহার করা হয়েছে, যা শুধুমাত্র JPA এবং ডাটাবেস সম্পর্কিত টেস্টিং সরবরাহ করবে। findByName() মেথডের মাধ্যমে Employee
ডাটাবেস থেকে নাম অনুসারে রেকর্ড অনুসন্ধান করা হয় এবং assertThat() দিয়ে ফলাফল যাচাই করা হয়।
এখন, টেস্ট চালানোর জন্য আপনি JUnit বা অন্য কোনো টেস্ট রানের মাধ্যমে আপনার টেস্ট কেসটি চালাতে পারেন। যদি সবকিছু ঠিক থাকে, তাহলে আপনার টেস্ট সফলভাবে চলে যাবে এবং আপনি নিশ্চিত হতে পারবেন যে আপনার EmployeeRepository
সঠিকভাবে কাজ করছে।
@DataJpaTest Spring Test Framework এর একটি শক্তিশালী অ্যানোটেশন, যা শুধুমাত্র JPA এবং ডাটাবেস সম্পর্কিত কার্যক্রম পরীক্ষা করতে ব্যবহৃত হয়। এটি ইন-মেমরি ডাটাবেস ব্যবহার করে দ্রুত এবং নির্ভরযোগ্য টেস্টিং সক্ষম করে। JPA রেপোজিটরি এবং ডাটাবেস অপারেশনগুলোর কার্যকারিতা নিশ্চিত করার জন্য @DataJpaTest অত্যন্ত উপযোগী।
ORM Testing হল ORM (Object-Relational Mapping) ব্যবহারের মাধ্যমে ডেটাবেজ অপারেশনগুলির সঠিকতা পরীক্ষা করার প্রক্রিয়া। Spring ORM এবং Hibernate ব্যবহার করে ORM টেস্টিং করার সময়, আপনি সাধারণত JUnit এবং Spring TestContext Framework ব্যবহার করবেন। ORM টেস্টিং এর মাধ্যমে আপনি নিশ্চিত করতে পারেন যে আপনার ডেটাবেজ অপারেশন সঠিকভাবে কাজ করছে এবং টানজেকশনাল ইন্টেগ্রিটি বজায় রাখা হচ্ছে।
Spring ORM এর সাথে ORM টেস্টিং করার জন্য আপনি ডেটাবেজ সম্পর্কিত কোডগুলি পরীক্ষার জন্য In-Memory Database যেমন H2 Database বা HSQLDB ব্যবহার করতে পারেন। এতে করে প্রোডাকশন ডেটাবেজের পরিবর্তে টেস্টিং পরিবেশে নিরাপদে কাজ করা যায়।
Spring ORM টেস্টিং করতে হলে প্রথমে Spring Context Configuration তৈরি করতে হবে যাতে Spring Beans এবং ORM সম্পর্কিত কনফিগারেশন লোড হয়।
TestConfig.java
@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = "com.example")
@Import(HibernateConfig.class)
public class TestConfig {
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:/schema.sql")
.build();
}
@Bean
public SessionFactory sessionFactory() {
return new LocalSessionFactoryBean().getObject();
}
}
বর্ণনা:
@EnableTransactionManagement
: Spring এর ট্রানজেকশন ম্যানেজমেন্ট সক্রিয় করতে ব্যবহৃত হয়।@Import(HibernateConfig.class)
: Hibernate কনফিগারেশন ইম্পোর্ট করা হয়।@Bean
ব্যবহার করে DataSource
এবং SessionFactory
কনফিগার করা হয়।এখন আমরা একটি ORM Entity টেস্ট করবো, যেমন একটি Employee Entity। আমাদের লক্ষ্য হল, সঠিকভাবে ডেটা সেভ করা, রিট্রিভ করা, আপডেট এবং ডিলিট করা।
Employee.java
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private double salary;
// Getters and Setters
}
আমরা Employee
Entity এর সাথে সম্পর্কিত ডেটাবেজ অপারেশনগুলো DAO (Data Access Object) ক্লাসে রাখব।
EmployeeDAO.java
@Repository
public class EmployeeDAO {
@Autowired
private SessionFactory sessionFactory;
@Transactional
public void save(Employee employee) {
sessionFactory.getCurrentSession().save(employee);
}
@Transactional
public Employee get(int id) {
return sessionFactory.getCurrentSession().get(Employee.class, id);
}
@Transactional
public void delete(int id) {
Employee employee = sessionFactory.getCurrentSession().get(Employee.class, id);
if (employee != null) {
sessionFactory.getCurrentSession().delete(employee);
}
}
}
এখন, ORM টেস্টিং ক্লাস তৈরি করা হবে যেখানে আমরা EmployeeDAO
এর বিভিন্ন মেথড পরীক্ষা করবো।
EmployeeDAOTest.java
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = TestConfig.class)
@Transactional
public class EmployeeDAOTest {
@Autowired
private EmployeeDAO employeeDAO;
private Employee employee;
@Before
public void setUp() {
employee = new Employee();
employee.setName("John Doe");
employee.setSalary(50000);
}
@Test
public void testSaveEmployee() {
employeeDAO.save(employee);
assertNotNull(employee.getId()); // Check if the employee ID is generated
}
@Test
public void testGetEmployee() {
employeeDAO.save(employee);
Employee retrievedEmployee = employeeDAO.get(employee.getId());
assertEquals(employee.getName(), retrievedEmployee.getName());
}
@Test
public void testDeleteEmployee() {
employeeDAO.save(employee);
int employeeId = employee.getId();
employeeDAO.delete(employeeId);
Employee deletedEmployee = employeeDAO.get(employeeId);
assertNull(deletedEmployee); // The employee should be null after deletion
}
}
বর্ণনা:
@RunWith(SpringRunner.class)
: Spring TestContext Framework এর মাধ্যমে টেস্ট চালানোর জন্য ব্যবহৃত হয়।@ContextConfiguration
: Spring কনফিগারেশন লোড করার জন্য ব্যবহৃত হয়।@Transactional
: টেস্টের মধ্যে সমস্ত ডেটাবেজ অপারেশন একক ট্রানজেকশনে সম্পন্ন হয়।@Before
: টেস্ট শুরু হওয়ার আগে কিছু ইনিশিয়াল ডেটা সেটআপ করা হয়।@Test
: টেস্ট মেথড নির্দেশ করে।আপনি যখন এই টেস্টটি চালাবেন, তখন Spring এর Transaction Management নিশ্চিত করবে যে সব অপারেশন সফল হলে ডেটাবেজের পরিবর্তন রোলব্যাক হবে। এতে করে আপনার প্রোডাকশন ডেটাবেজে কোনো পরিবর্তন না হয়ে শুধুমাত্র টেস্ট পরিবেশে সব অপারেশন সম্পন্ন হবে।
Spring ORM টেস্টিং সঠিকভাবে ডেটাবেজ অপারেশনের কার্যকারিতা এবং সঠিকতা পরীক্ষা করতে সাহায্য করে। JUnit এবং Spring TestContext Framework ব্যবহার করে আপনি ইন-মেমরি ডেটাবেজের মাধ্যমে Spring ORM এর কোড পরীক্ষা করতে পারেন। ORM টেস্টিং এর মাধ্যমে নিশ্চিত করা হয় যে আপনার ডেটাবেজ অপারেশনগুলি সঠিকভাবে কাজ করছে এবং ট্রানজেকশনাল ইন্টেগ্রিটি বজায় রাখা হচ্ছে।
Read more